# 需求：摆放家具
# 分析：
# 1.需要两个类 ---> 两个不同的对象
# 2.两个对象之间有关联关系
# 3.两个对象谁先谁后？  ---> 家具在前 （被操作的对象需要先创建）

# 1、类设计：家具
# 类名：HouseItem
# 属性：name  area
# 方法：无
# 类设计：房子
# 类名：House
# 属性：户型、总面积 --> house_type  total_area
# 方法：添加家具 --> add_item()
# 2、实现代码
import self as self


class Houseltem(object):
    """家具类"""
    def __init__(self,name,area):
        """设置家具属性"""
        self.name = name
        self.area = area
    def __str__(self):
        """查看对象信息"""
        return f"{self.name}的面积是：{self.area}平米"
# 创建对象
bed = Houseltem('席梦思',4)
chest = Houseltem('衣柜',2)
table = Houseltem('餐桌',1.5)
# print(bed)
# # # 外部获取家具的面积
# print(bed.area)
# print(chest.area)
# # # 获取家具的名称
# print(bed.name)

class House(object):
    """房子类"""
    def __init__(self,house_type,total_area):
        """设置房子属性"""
        self.house_type = house_type  # 户型
        self.total_area = total_area  # 面积
        self.free_area = total_area  # 创建房子对象时，总面积就是剩余面积   self.free_area = 剩余面积
        self.item_list = []  # 创建房子对象时，家具列表默认是空    self.item_list = 家具列表
    def add_item(self,item):     # item相当于上述类创建的任何一个家具对象
        """添加家具的方法"""
        # 判断家具面积是否超过剩余面积
        if item.area < self.free_area:
# 如何判断家具被添加进去了？ --> 剩余面积减少了，家具名称列表有元素新增
# self.free_area = 上一次剩余面积 - item.area
# 家具的面积可以是任何一个家具（通过形参表示）【bed.area】
# self.free_area = self.free_area - item.area  # 从第二次开始添加家具
            self.free_area -= item.area
            self.item_list.append(item.name)   # 家具名称相当于其中一个： bed.name
        else:
            print("家具面积过大，无法添加")
    def __str__(self):
        """打印房子对象"""
        return f"户型：{self.house_type}，总面积：{self.total_area}，剩余面积：{self.free_area}，家具名称列表：{self.item_list}"
# 创建对象
h1 = House("一室一厅",50)
# 调用方法
h1.add_item(bed)
h1.add_item(chest)
h1.add_item(table)
# 打印房子对象
print(h1)

